<?php

/** 
 * @author felipe
 * 
 * 
 */
class App_Model_Db_Armazenagem extends Voitech_Db{
	protected $_name = 'armazenagem';
        protected $_primary = 'co_armazenagem';
	
	static private $instancia;

	/**
	 * @return App_Model_Db_Armazenagem
	 */
	static public function build() {
		if( !isset( self::$instancia ) ) {
			$classe = __CLASS__;
			self::$instancia = new $classe();
		}
		return self::$instancia;
	}

        protected function getSelectArmazenagem(){
            return $this->getAdapter()->select()
                                       ->from('armazenagem')
                                       ->columns(array("nu_quantidade_produto_estoque"=>new Zend_Db_Expr("count(armazenagem.co_produto)")
                                                       ,'st_ativo_produto'=>'produto.st_ativo'
                                                       ,'dt_cadastro_produto'=>'produto.dt_cadastro'))
                                       ->joinInner('produto',"produto.co_produto = armazenagem.co_produto and produto.st_ativo = 'S'")                                      
                                       ->joinInner('categoria','produto.co_categoria = categoria.co_categoria')
                                       ->joinInner('tipo_produto','produto.co_tipo_produto = tipo_produto.co_tipo_produto')
                                       ->joinInner('compra','compra.co_compra = armazenagem.co_compra')
                                       ->joinLeft('distribuicao','distribuicao.co_distribuicao = armazenagem.co_distribuicao');        
        }
        
        public function buscarArmazenados(App_Model_Produto $obProduto){
            $obSelect = $this->getSelectArmazenagem()->where('armazenagem.co_distribuicao is null');
            if($obProduto->getCoProduto() != ''){
                $obSelect->where('armazenagem.co_produto = ?',$obProduto->getCoProduto());                                                    
            }
            if($obProduto->getNoProduto() != ''){
                $obSelect->where('produto.no_produto like ?',$obProduto->getNoProduto()."%");                                                    
            }
            if($obProduto->getObCategoria() != '' and $obProduto->getObCategoria()->getCoCategoria() != ''){
                $obSelect->where('produto.co_categoria = ?',$obProduto->getObCategoria()->getCoCategoria());                                                    
            }
            if($obProduto->getObTipoProduto() != '' and $obProduto->getObTipoProduto()->getCoTipoProduto() != ''){
                $obSelect->where('produto.co_tipo_produto = ?',$obProduto->getObTipoProduto()->getCoTipoProduto());                                                    
            }
            $obSelect->order('produto.no_produto');
            $obSelect->group('armazenagem.co_produto');
            return $this->getAdapter()->fetchAll($obSelect);
        }
        
        public function buscarDistribuidos($co_produto){
            $obSelect = $this->getSelectArmazenagem()->where('armazenagem.co_produto =?',$co_produto)
                                                    ->where('armazenagem.co_distribuicao is not null');
            return $this->getAdapter()->fetchAll($obSelect);
        }
        
        public function listarArmazenagemLimite($nuLimite){
            $obSelect = $this->getAdapter()->select()
                               ->from('produto')
                               ->columns(array('st_ativo_produto'=>'produto.st_ativo','dt_cadastro_produto'=>'produto.dt_cadastro'))
                               ->joinInner('categoria','produto.co_categoria = categoria.co_categoria')
                               ->joinInner('tipo_produto','produto.co_tipo_produto = tipo_produto.co_tipo_produto')
                               ->joinLeft(array("armazenagem"=>new Zend_Db_Expr("(select count(co_produto) as nu_quantidade_produto_estoque, co_produto 
                                                             from armazenagem where co_distribuicao is null
                                                             group by co_produto)"))
                                          , "produto.co_produto = armazenagem.co_produto")
                               ->where("produto.st_ativo like 'S'")
                               ->where('armazenagem.co_produto is null')
                               ->orWhere('armazenagem.nu_quantidade_produto_estoque <= ?', $nuLimite);                           
            return $this->getAdapter()->fetchAll($obSelect);
        }                                     
}